#pragma once
#include <iostream>
#include <cstring>
#include "Companys.hpp"

struct Programmer
{
    virtual ~Programmer() = default;
    virtual void coding(char *buff) = 0;

    Programmer(Company *company) : m_comapny{company} {}

protected: // TODO: brige added here, should be protected
    Company *m_comapny;
};

struct ProgrammerCPlus : public Programmer
{
    ProgrammerCPlus(Company *company) : Programmer(company)
    {
    }

    void coding(char *buff) override
    {
        strcpy(buff, "Cpp coding style: std::cout << ");
        std::cout << "[INFO]: cpp debug here\n";
    }
};

struct ProgrammerJava : public Programmer
{
    ProgrammerJava(Company *company) : Programmer(company)
    {
    }

    void coding(char *buff) override
    {
        strcpy(buff, "Java coding style: System.out.println()");
        std::cout << "[INFO]: java debug here\n";
    }
};

struct ProgrammerPython : public Programmer
{
    ProgrammerPython(Company *company) : Programmer(company) {}

    void coding(char *buff) override
    {
        strcpy(buff, "Python coding style: print()");
        std::cout << "[INFO]: python debug here\n";
    }
};

// TODO: more Programmer type to be added
